home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / dev / m2 / m2_part1.lha / modula / src / Exec.def < prev    next >
Text File  |  1994-07-30  |  34KB  |  980 lines

  1. DEFINITION FOR AMIGALIB MODULE Exec ;
  2.  
  3. FROM SYSTEM IMPORT STRING, ADDRESS, SHORTSET, BITSET, LONGSET ;
  4.  
  5. TYPE
  6.   NodePtr        = POINTER TO Node ;
  7.   MinNodePtr        = POINTER TO MinNode ;
  8.   ListPtr        = POINTER TO List ;
  9.   MinListPtr        = POINTER TO MinList ;
  10.   ResidentPtr        = POINTER TO Resident ;
  11.   MemChunkPtr        = POINTER TO MemChunk ;
  12.   MemHeaderPtr        = POINTER TO MemHeader ;
  13.   MemEntryPtr        = POINTER TO MemEntry ;
  14.   MemListPtr        = POINTER TO MemList ;
  15.   MemHandlerDataPtr    = POINTER TO MemHandlerData ;
  16.   TaskPtr        = POINTER TO Task ;
  17.   StackSwapStructPtr    = POINTER TO StackSwapStruct ;
  18.   MsgPortPtr        = POINTER TO MsgPort ;
  19.   MessagePtr        = POINTER TO Message ;
  20.   InterruptPtr        = POINTER TO Interrupt ;
  21.   IntVectorPtr        = POINTER TO IntVector ;
  22.   SoftIntListPtr    = POINTER TO SoftIntList ;
  23.   SemaphoreRequestPtr    = POINTER TO SemaphoreRequest ;
  24.   SignalSemaphorePtr    = POINTER TO SignalSemaphore ;
  25.   SemaphoreMessagePtr    = POINTER TO SemaphoreMessage ;
  26.   SemaphorePtr        = POINTER TO Semaphore ;
  27.   LibraryPtr        = POINTER TO Library ;
  28.   IORequestPtr        = POINTER TO IORequest ;
  29.   IOStdReqPtr        = POINTER TO IOStdReq ;
  30.   DevicePtr        = POINTER TO Device ;
  31.   UnitPtr        = POINTER TO Unit ;
  32.   ExecBasePtr        = POINTER TO ExecBase ;
  33.  
  34. CONST
  35.  
  36.   INCLUDE_VERSION = 40 ; (* Version of the include files in use. (Do not *)
  37.              (* use this label for OpenLibrary() calls!)     *)
  38.  
  39. (* LIBRARY_VERSION is now obsolete.  Please use LIBRARY_MINIMUM     *)
  40. (* or code the specific minimum library version you require.        *)
  41.  
  42.   LIBRARY_MINIMUM = 33 ; (* Lowest version supported by Commodore-Amiga *)
  43.  
  44. TYPE
  45.   Node = RECORD
  46.     ln_Succ : NodePtr   ; (* Pointer to next (successor)    *)
  47.     ln_Pred : NodePtr   ; (* Pointer to previous (predecessor)    *)
  48.     ln_Type : SHORTCARD ;
  49.     ln_Pri  : SHORTINT  ; (* Priority, for sorting        *)
  50.     ln_Name : STRING    ; (* ID string, null terminated        *)
  51.   END ;    (* Note: word aligned *)
  52.  
  53. (* minimal node -- no type checking possible *)
  54.  
  55.   MinNode = RECORD
  56.     mln_Succ : MinNodePtr ;
  57.     mln_Pred : MinNodePtr ;
  58.   END ;
  59.  
  60. (* Note: Newly initialized IORequests, and software interrupt structures      *)
  61. (* used with Cause(), should have type NT_UNKNOWN.  The OS will assign a type *)
  62. (* when they are first used.                              *)
  63.  
  64. (*----- Node Types for LN_TYPE -----*)
  65. CONST
  66.   NT_UNKNOWN      = 0  ;
  67.   NT_TASK      = 1  ; (* Exec task                    *)
  68.   NT_INTERRUPT      = 2  ;
  69.   NT_DEVICE      = 3  ;
  70.   NT_MSGPORT      = 4  ;
  71.   NT_MESSAGE      = 5  ; (* Indicates message currently pending *)
  72.   NT_FREEMSG      = 6  ;
  73.   NT_REPLYMSG      = 7  ; (* Message has been replied            *)
  74.   NT_RESOURCE      = 8  ;
  75.   NT_LIBRARY      = 9  ;
  76.   NT_MEMORY      = 10 ;
  77.   NT_SOFTINT      = 11 ; (* Internal flag used by SoftInits     *)
  78.   NT_FONT      = 12 ;
  79.   NT_PROCESS      = 13 ; (* AmigaDOS Process                *)
  80.   NT_SEMAPHORE      = 14 ;
  81.   NT_SIGNALSEM    = 15 ; (* signal semaphores                *)
  82.   NT_BOOTNODE      = 16 ;
  83.   NT_KICKMEM      = 17 ;
  84.   NT_GRAPHICS      = 18 ;
  85.   NT_DEATHMESSAGE = 19 ;
  86.  
  87.   NT_USER      = 254 ; (* User node types work down from here *)
  88.   NT_EXTENDED      = 255 ;
  89.  
  90. (* Full featured list header *)
  91.  
  92. TYPE
  93.   List = RECORD
  94.     lh_Head    : NodePtr   ;
  95.     lh_Tail    : NodePtr   ;
  96.     lh_TailPred : NodePtr   ;
  97.     lh_Type    : SHORTCARD ;
  98.     l_pad    : SHORTCARD ;
  99.   END ;    (* word aligned *)
  100.  
  101. (* Minimal List Header - no type checking *)
  102.  
  103.   MinList = RECORD
  104.     mlh_Head     : MinNodePtr ;
  105.     mlh_Tail     : MinNodePtr ;
  106.     mlh_TailPred : MinNodePtr ;
  107.   END ;    (* longword aligned *)
  108.  
  109. CONST
  110.   IOERR_OPENFAIL   = -1 ; (* device/unit failed to open           *)
  111.   IOERR_ABORTED       = -2 ; (* request terminated early [after AbortIO()]   *)
  112.   IOERR_NOCMD       = -3 ; (* command not supported by device           *)
  113.   IOERR_BADLENGTH  = -4 ; (* not a valid length (usually IO_LENGTH)       *)
  114.   IOERR_BADADDRESS = -5 ; (* invalid address (misaligned or bad range)      *)
  115.   IOERR_UNITBUSY   = -6 ; (* device opens ok, but requested unit is busy  *)
  116.   IOERR_SELFTEST   = -7 ; (* hardware failed self-test              *)
  117.  
  118. TYPE
  119.   Resident = RECORD
  120.     rt_MatchWord : CARDINAL    ; (* word to match on (ILLEGAL)         *)
  121.     rt_MatchTag  : ResidentPtr ; (* pointer to the above         *)
  122.     rt_EndSkip   : ADDRESS     ; (* address to continue scan         *)
  123.     rt_Flags     : SHORTSET    ; (* various tag flags             *)
  124.     rt_Version   : SHORTCARD   ; (* release version number         *)
  125.     rt_Type      : SHORTCARD   ; (* type of module (NT_XXXXXX)         *)
  126.     rt_Pri       : SHORTINT    ; (* initialization priority         *)
  127.     rt_Name      : STRING      ; (* pointer to node name         *)
  128.     rt_IdString  : STRING      ; (* pointer to identification string *)
  129.     rt_Init      : ADDRESS     ; (* pointer to init code         *)
  130.   END ;
  131.  
  132. CONST
  133.   RTC_MATCHWORD     = 04AFCH ;    (* The 68000 "ILLEGAL" instruction *)
  134.  
  135.   RTF_AUTOINIT     = {7} ;    (* rt_Init points to data structure *)
  136.   RTF_AFTERDOS     = {2} ;
  137.   RTF_SINGLETASK = {1} ;
  138.   RTF_COLDSTART     = {0} ;
  139.  
  140. (* Compatibility: (obsolete) *)
  141. (* RTM_WHEN 3             *)
  142.  
  143.   RTW_NEVER    = 0 ;
  144.   RTW_COLDSTART    = 1 ;
  145.  
  146. (*----- MemChunk ---------------------------------------------------*)
  147.  
  148. TYPE
  149.   MemChunk = RECORD
  150.     mc_Next  : MemChunkPtr ; (* pointer to next chunk *)
  151.     mc_Bytes : LONGINT     ; (* chunk byte size          *)
  152.   END ;
  153.  
  154. (*----- MemHeader --------------------------------------------------*)
  155.  
  156.   MemHeader = RECORD
  157.     mh_Node      : Node        ;
  158.     mh_Attributes : BITSET      ; (* characteristics of this region *)
  159.     mh_First      : MemChunkPtr ; (* first free region            *)
  160.     mh_Lower      : ADDRESS     ; (* lower memory bound            *)
  161.     mh_Upper      : ADDRESS     ; (* upper memory bound+1        *)
  162.     mh_Free       : LONGINT     ; (* total number of free bytes        *)
  163.   END ;
  164.  
  165. (*----- MemEntry ---------------------------------------------------*)
  166.  
  167.   MemEntry = RECORD
  168.     me_Un : RECORD
  169.       CASE :BOOLEAN OF
  170.       | TRUE  : meu_Reqs : LONGSET
  171.       | FALSE : meu_Addr : ADDRESS
  172.       END;
  173.     END ;
  174.     me_Length : LONGINT
  175.   END ;
  176.  
  177. (*----- MemList ----------------------------------------------------*)
  178.  
  179. (* Note: sizeof(struct MemList) includes the size of the first MemEntry! *)
  180.  
  181.   MemList = RECORD
  182.     ml_Node      : Node ;
  183.     ml_NumEntries : CARDINAL ;    (* number of entries in this struct *)
  184.     ml_ME      : ARRAY [0..0] OF MemEntry ; (* the first entry    *)
  185.   END ;
  186.  
  187. (*----- Memory Requirement Types ---------------------------*)
  188. (*----- See the AllocMem() documentation for details--------*)
  189.  
  190. CONST
  191.   MEMF_ANY      = { }  ; (* Any type of memory will do             *)
  192.   MEMF_PUBLIC   = {0}  ;
  193.   MEMF_CHIP     = {1}  ;
  194.   MEMF_FAST     = {2}  ;
  195.   MEMF_LOCAL    = {8}  ; (* Memory that does not go away at RESET    *)
  196.   MEMF_24BITDMA = {9}  ; (* DMAable memory within 24 bits of address *)
  197.   MEMF_KICK     = {10} ; (* Memory that can be used for KickTags     *)
  198.  
  199.   MEMF_CLEAR    = {16} ; (* AllocMem: NULL out area before return    *)
  200.   MEMF_LARGEST  = {17} ; (* AvailMem: return the largest chunk size  *)
  201.   MEMF_REVERSE  = {18} ; (* AllocMem: allocate from the top down     *)
  202.   MEMF_TOTAL    = {19} ; (* AvailMem: return total size of memory    *)
  203.  
  204.   MEMF_NO_EXPUNGE = {31} ; (* AllocMem: Do not cause expunge on failure *)
  205.  
  206. (*----- Current alignment rules for memory blocks (may increase) -----*)
  207.   MEM_BLOCKSIZE    = 8 ;
  208.   MEM_BLOCKMASK    = {0..2} ;
  209.  
  210.  
  211. (*----- MemHandlerData ---------------------------------------------*)
  212. (* Note:  This structure is *READ ONLY* and only EXEC can create it!*)
  213.  
  214. TYPE
  215.   MemHandlerData = RECORD
  216.     memh_RequestSize  : LONGINT ; (* Requested allocation size    *)
  217.     memh_RequestFlags : LONGSET ; (* Requested allocation flags *)
  218.     memh_Flags        : LONGSET ; (* Flags (see below)        *)
  219.   END ;
  220.  
  221. CONST
  222.   MEMHF_RECYCLE    = {0} ;    (* 0==First time, 1==recycle *)
  223.  
  224. (*----- Low Memory handler return values --------------------------*)
  225.  
  226.   MEM_DID_NOTHING = 0  ; (* Nothing we could do...          *)
  227.   MEM_ALL_DONE      = -1 ; (* We did all we could do          *)
  228.   MEM_TRY_AGAIN      = 1  ; (* We did some, try the allocation again *)
  229.  
  230. (* Please use Exec functions to modify task structure fields, where available *)
  231.  
  232. TYPE
  233.   Task = RECORD
  234.     tc_Node       : Node     ;
  235.     tc_Flags      : SHORTSET ;
  236.     tc_State      : SHORTCARD;
  237.     tc_IDNestCnt  : SHORTINT ; (* intr disabled nesting            *)
  238.     tc_TDNestCnt  : SHORTINT ; (* task disabled nesting            *)
  239.     tc_SigAlloc   : LONGSET  ; (* sigs allocated            *)
  240.     tc_SigWait    : LONGSET  ; (* sigs we are waiting for        *)
  241.     tc_SigRecvd   : LONGSET  ; (* sigs we have received            *)
  242.     tc_SigExcept  : LONGSET  ; (* sigs we will take excepts for        *)
  243.     tc_TrapAlloc  : CARDINAL ; (* traps allocated            *)
  244.     tc_TrapAble   : CARDINAL ; (* traps enabled                *)
  245.     tc_ExceptData : ADDRESS  ; (* points to except data            *)
  246.     tc_ExceptCode : ADDRESS  ; (* points to except code            *)
  247.     tc_TrapData   : ADDRESS  ; (* points to trap data            *)
  248.     tc_TrapCode   : ADDRESS  ; (* points to trap code            *)
  249.     tc_SPReg      : ADDRESS  ; (* stack pointer                *)
  250.     tc_SPLower    : ADDRESS  ; (* stack lower bound            *)
  251.     tc_SPUpper    : ADDRESS  ; (* stack upper bound + 2            *)
  252.     tc_Switch     : PROC     ; (* task losing CPU            *)
  253.     tc_Launch     : PROC     ; (* task getting CPU                *)
  254.     tc_MemEntry   : List     ; (* Allocated memory. Freed by RemTask()  *)
  255.     tc_UserData   : ADDRESS  ; (* For use by the task; no restrictions! *)
  256.   END ;
  257.  
  258. (* Stack swap structure as passed to StackSwap() *)
  259.  
  260.   StackSwapStruct = RECORD
  261.     stk_Lower   : ADDRESS  ; (* Lowest byte of stack            *)
  262.     stk_Upper   : LONGINT  ; (* Upper end of stack (size + Lowest) *)
  263.     stk_Pointer : ADDRESS  ; (* Stack pointer at switch point       *)
  264.   END ;
  265.  
  266. (*----- Flag Bits ------------------------------------------*)
  267.  
  268. CONST
  269.   TB_PROCTIME    = 0 ;
  270.   TB_ETASK    = 3 ;
  271.   TB_STACKCHK    = 4 ;
  272.   TB_EXCEPT    = 5 ;
  273.   TB_SWITCH    = 6 ;
  274.   TB_LAUNCH    = 7 ;
  275.  
  276.   TF_PROCTIME    = {0} ;
  277.   TF_ETASK    = {3} ;
  278.   TF_STACKCHK    = {4} ;
  279.   TF_EXCEPT    = {5} ;
  280.   TF_SWITCH    = {6} ;
  281.   TF_LAUNCH    = {7} ;
  282.  
  283. (*----- Task States ----------------------------------------*)
  284.  
  285.   TS_INVALID    = 0 ;
  286.   TS_ADDED    = 1 ;
  287.   TS_RUN    = 2 ;
  288.   TS_READY    = 3 ;
  289.   TS_WAIT    = 4 ;
  290.   TS_EXCEPT    = 5 ;
  291.   TS_REMOVED    = 6 ;
  292.  
  293. (*----- Predefined Signals -------------------------------------*)
  294.  
  295.   SIGB_ABORT     = 0 ;
  296.   SIGB_CHILD     = 1 ;
  297.   SIGB_BLIT     = 4 ;    (* Note: same as SINGLE *)
  298.   SIGB_SINGLE     = 4 ;    (* Note: same as BLIT   *)
  299.   SIGB_INTUITION = 5 ;
  300.   SIGB_NET     = 7 ;
  301.   SIGB_DOS     = 8 ;
  302.  
  303.   SIGF_ABORT     = {0} ;
  304.   SIGF_CHILD     = {1} ;
  305.   SIGF_BLIT     = {4} ;
  306.   SIGF_SINGLE     = {4} ;
  307.   SIGF_INTUITION = {5} ;
  308.   SIGF_NET     = {7} ;
  309.   SIGF_DOS     = {8} ;
  310.  
  311. (*----- MsgPort ----------------------------------------------------*)
  312.  
  313. TYPE
  314.   MsgPort = RECORD
  315.     mp_Node   : Node      ;
  316.     mp_Flags  : SHORTSET  ;
  317.     mp_SigBit : SHORTCARD ; (* signal bit number *)
  318.     CASE :INTEGER OF
  319.     |0: mp_SigTask : TaskPtr      ; (* object to be signalled *)
  320.     |1: mp_SoftInt : InterruptPtr ; (* Alias              *)
  321.     |2: sm_LockMsg : ADDRESS      ;
  322.     END ;
  323.     mp_MsgList : List ; (* message linked list *)
  324.   END ;
  325.  
  326. CONST
  327.   (* mp_Flags: Port arrival actions (PutMsg) *)
  328.  
  329.   PF_ACTION  = {0,1} ; (* Mask                        *)
  330.   PA_SIGNAL  =  0    ; (* Signal task in mp_SigTask            *)
  331.   PA_SOFTINT =  1    ; (* Signal SoftInt in mp_SoftInt/mp_SigTask    *)
  332.   PA_IGNORE  =  2    ; (* Ignore arrival                *)
  333.  
  334. (*----- Message ----------------------------------------------------*)
  335.  
  336. TYPE
  337.   Message = RECORD
  338.     mn_Node      : Node       ;
  339.     mn_ReplyPort : MsgPortPtr ; (* message reply port            *)
  340.     mn_Length    : CARDINAL   ; (* total message length, in bytes   *)
  341.                 (* (include the size of the Message *)
  342.                 (* structure in the length)        *)
  343.   END ;
  344.  
  345.   Interrupt = RECORD
  346.     is_Node : Node    ;
  347.     is_Data : ADDRESS ; (* server data segment  *)
  348.     is_Code : PROC    ; (* server code entry    *)
  349.   END ;
  350.  
  351.   IntVector = RECORD    (* For EXEC use ONLY! *)
  352.     iv_Data : ADDRESS ;
  353.     iv_Code : PROC    ;
  354.     iv_Node : NodePtr ;
  355.   END ;
  356.  
  357.   SoftIntList = RECORD    (* For EXEC use ONLY! *)
  358.     sh_List : List ;
  359.     sh_Pad  : CARDINAL ;
  360.   END ;
  361.  
  362. CONST
  363.   SIH_PRIMASK = 0F0H ;
  364.  
  365. (* this is a fake INT definition, used only for AddIntServer and the like *)
  366.   INTB_NMI =  15  ;
  367.   INTF_NMI = {15} ;
  368.  
  369. (*----- SignalSemaphore --------------------------------------------*)
  370.  
  371. (* Private structure used by ObtainSemaphore() *)
  372.  
  373. TYPE
  374.   SemaphoreRequest = RECORD
  375.     sr_Link   : MinNode ;
  376.     sr_Waiter : TaskPtr ;
  377.   END ;
  378.  
  379. (* Signal Semaphore data structure *)
  380.  
  381.   SignalSemaphore = RECORD
  382.     ss_Link        : Node    ;
  383.     ss_NestCount    : INTEGER ;
  384.     ss_WaitQueue    : MinList ;
  385.     ss_MultipleLink : SemaphoreRequest ;
  386.     ss_Owner        : TaskPtr ;
  387.     ss_QueueCount   : INTEGER ;
  388.   END ;
  389.  
  390. (*----- Semaphore procure message (for use in V39 Procure/Vacate ---*)
  391.  
  392.   SemaphoreMessage = RECORD
  393.     ssm_Message   : Message ;
  394.     ssm_Semaphore : SignalSemaphorePtr ;
  395.   END ;
  396.  
  397. CONST
  398.   SM_SHARED    = 1 ;
  399.   SM_EXCLUSIVE    = 0 ;
  400.  
  401. (*----- Semaphore (Old Procure/Vacate type, not reliable) -------*)
  402.  
  403. TYPE
  404.   Semaphore = RECORD    (* Do not use these semaphores! *)
  405.     sm_MsgPort : MsgPort ;
  406.     sm_Bids    : INTEGER ;
  407.   END ;
  408.  
  409. (*------ Special Constants ---------------------------------------*)
  410.  
  411. CONST
  412.   LIB_VECTSIZE    = 6 ;    (* Each library entry takes 6 bytes *)
  413.   LIB_RESERVED    = 4 ;    (* Exec reserves the first 4 vectors *)
  414.   LIB_BASE    = -LIB_VECTSIZE ;
  415.   LIB_USERDEF    = LIB_BASE-(LIB_RESERVED*LIB_VECTSIZE) ;
  416.   LIB_NONSTD    = LIB_USERDEF ;
  417.  
  418. (*------ Standard Functions --------------------------------------*)
  419.  
  420.   LIB_OPEN     = -6  ;
  421.   LIB_CLOSE    = -12 ;
  422.   LIB_EXPUNGE  = -18 ;
  423.   LIB_EXTFUNC  = -24 ;    (* for future expansion *)
  424.  
  425. (*------ Library Base Structure ----------------------------------*)
  426.  
  427. (* Also used for Devices and some Resources *)
  428. TYPE
  429.   Library = RECORD
  430.     CASE : INTEGER OF
  431.     | 0:
  432.       lib_Node     : Node      ;
  433.       lib_Flags    : SHORTSET  ;
  434.       lib_pad      : SHORTCARD ;
  435.       lib_NegSize  : CARDINAL  ; (* number of bytes before library    *)
  436.       lib_PosSize  : CARDINAL  ; (* number of bytes after library    *)
  437.       lib_Version  : CARDINAL  ; (* major                *)
  438.       lib_Revision : CARDINAL  ; (* minor                *)
  439.       lib_IdString : STRING    ; (* ASCII identification        *)
  440.       lib_Sum      : LONGINT   ; (* the checksum itself            *)
  441.       lib_OpenCnt  : CARDINAL  ; (* number of current opens        *)
  442.     | 1: (* Temporary Compatibility *)
  443.       lh_Node     : Node      ;
  444.       lh_Flags    : SHORTSET  ;
  445.       lh_pad      : SHORTCARD ;
  446.       lh_NegSize  : CARDINAL  ;
  447.       lh_PosSize  : CARDINAL  ;
  448.       lh_Version  : CARDINAL  ;
  449.       lh_Revision : CARDINAL  ;
  450.       lh_IdString : STRING    ;
  451.       lh_Sum      : LONGINT   ;
  452.       lh_OpenCnt  : CARDINAL  ;
  453.     END ;
  454.   END ;    (* Warning: size is not a longword multiple! *)
  455.  
  456. (* lib_Flags bit definitions (all others are system reserved) *)
  457.  
  458. CONST
  459.   LIBF_SUMMING = {0} ; (* we are currently checksumming  *)
  460.   LIBF_CHANGED = {1} ; (* we have just changed the lib   *)
  461.   LIBF_SUMUSED = {2} ; (* set if we should bother to sum *)
  462.   LIBF_DELEXP  = {3} ; (* delayed expunge         *)
  463.  
  464. TYPE
  465.   IORequest = RECORD
  466.     io_Message : Message   ;
  467.     io_Device  : DevicePtr ; (* device node pointer  *)
  468.     io_Unit    : UnitPtr   ; (* unit (driver private)*)
  469.     io_Command : CARDINAL  ; (* device command         *)
  470.     io_Flags   : SHORTSET  ;
  471.     io_Error   : SHORTINT  ; (* error or warning num *)
  472.   END ;
  473.  
  474.   IOStdReq = RECORD
  475.     io_Message : Message  ;
  476.     io_Device  : DevicePtr; (* device node pointer           *)
  477.     io_Unit    : UnitPtr  ; (* unit (driver private)           *)
  478.     io_Command : CARDINAL ; (* device command               *)
  479.     io_Flags   : SHORTSET ;
  480.     io_Error   : SHORTINT ; (* error or warning num            *)
  481.     io_Actual  : LONGINT  ; (* actual number of bytes transferred  *)
  482.     io_Length  : LONGINT  ; (* requested number bytes transferred  *)
  483.     io_Data    : ADDRESS  ; (* points to data area            *)
  484.     io_Offset  : LONGINT  ; (* offset for block structured devices *)
  485.   END ;
  486.  
  487. (* library vector offsets for device reserved vectors *)
  488.  
  489. CONST
  490.   DEV_BEGINIO =    -30 ;
  491.   DEV_ABORTIO =    -36 ;
  492.  
  493. (* io_Flags defined bits *)
  494.  
  495. CONST
  496.   IOB_QUICK =  0  ;
  497.   IOF_QUICK = {0} ;
  498.  
  499. CONST
  500.   CMD_INVALID = 0 ;
  501.   CMD_RESET   = 1 ;
  502.   CMD_READ    = 2 ;
  503.   CMD_WRITE   = 3 ;
  504.   CMD_UPDATE  = 4 ;
  505.   CMD_CLEAR   = 5 ;
  506.   CMD_STOP    = 6 ;
  507.   CMD_START   = 7 ;
  508.   CMD_FLUSH   = 8 ;
  509.  
  510.   CMD_NONSTD  = 9 ;
  511.  
  512. (*----- Device -----------------------------------------------------*)
  513.  
  514. TYPE
  515.   Device = RECORD dd_Library : Library END ;
  516.  
  517. (*----- Unit -------------------------------------------------------*)
  518.  
  519. TYPE
  520.   Unit = RECORD
  521.     unit_MsgPort : MsgPort   ;    (* queue for unprocessed messages    *)
  522.                 (* instance of msgport is recommended    *)
  523.     unit_flags   : SHORTSET  ;
  524.     unit_pad     : SHORTCARD ;
  525.     unit_OpenCnt : CARDINAL  ;    (* number of active opens        *)
  526.   END ;
  527.  
  528. CONST
  529.   UNITF_ACTIVE    = {0} ;
  530.   UNITF_INTASK    = {1} ;
  531.  
  532. (* Definition of the Exec library base structure (pointed to by location 4). *)
  533. (* Most fields are not to be viewed or modified by user programs.  Use         *)
  534. (* extreme caution.                                 *)
  535.  
  536. TYPE
  537.   ExecBase = RECORD
  538.     LibNode        : Library ; (* Standard library node *)
  539.  
  540. (*------- Static System Variables -------*)
  541.  
  542.     SoftVer        : CARDINAL; (* kickstart release number (obs.)        *)
  543.     LowMemChkSum    : INTEGER ; (* checksum of 68000 trap vectors        *)
  544.     ChkBase         : LONGINT ; (* system base pointer complement        *)
  545.     ColdCapture     : ADDRESS ; (* coldstart soft capture vector        *)
  546.     CoolCapture     : ADDRESS ; (* coolstart soft capture vector        *)
  547.     WarmCapture     : ADDRESS ; (* warmstart soft capture vector        *)
  548.     SysStkUpper     : ADDRESS ; (* system stack base   (upper bound)    *)
  549.     SysStkLower     : ADDRESS ; (* top of system stack (lower bound)    *)
  550.     MaxLocMem       : LONGINT ; (* top of chip memory            *)
  551.     DebugEntry      : ADDRESS ; (* global debugger entry point        *)
  552.     DebugData       : ADDRESS ; (* global debugger data segment         *)
  553.     AlertData       : ADDRESS ; (* alert data segment             *)
  554.     MaxExtMem       : ADDRESS ; (* top of extended mem, or null if none *)
  555.  
  556.     ChkSum        : CARDINAL ;     (* for all of the above (minus 2) *)
  557.  
  558. (*----- Interrupt Related --------------------------------------------*)
  559.  
  560.     IntVects        : ARRAY [0..15] OF IntVector ;
  561.  
  562. (*------ Dynamic System Variables ------------------------------------*)
  563.  
  564.     ThisTask        : TaskPtr  ;    (* pointer to current task (readable) *)
  565.  
  566.     IdleCount        : LONGINT  ;    (* idle counter               *)
  567.     DispCount        : LONGINT  ;    (* dispatch counter           *)
  568.     Quantum        : CARDINAL ;    (* time slice quantum           *)
  569.     Elapsed        : CARDINAL ;    (* current quantum ticks       *)
  570.     SysFlags        : BITSET   ;    (* misc internal system flags       *)
  571.     IDNestCnt        : SHORTINT ;    (* interrupt disable nesting count *)
  572.     TDNestCnt        : SHORTINT ;    (* task disable nesting count      *)
  573.  
  574.     AttnFlags        : BITSET   ;    (* special attention flags (readable) *)
  575.  
  576.     AttnResched        : CARDINAL;    (* rescheduling attention        *)
  577.     ResModules        : ADDRESS ;    (* resident module array pointer *)
  578.     TaskTrapCode    : ADDRESS ;
  579.     TaskExceptCode    : ADDRESS ;
  580.     TaskExitCode    : ADDRESS ;
  581.     TaskSigAlloc    : LONGSET ;
  582.     TaskTrapAlloc    : BITSET  ;
  583.  
  584. (*----- System Lists (private!) -------------------------------*)
  585.  
  586.     MemList        : List ;
  587.     ResourceList    : List ;
  588.     DeviceList        : List ;
  589.     IntrList        : List ;
  590.     LibList        : List ;
  591.     PortList        : List ;
  592.     TaskReady        : List ;
  593.     TaskWait        : List ;
  594.  
  595.     SoftInts        : ARRAY [0..4] OF SoftIntList ;
  596.  
  597. (*----- Other Globals ------------------------------------------*)
  598.  
  599.     LastAlert        : ARRAY [0..3] OF LONGINT ;
  600.  
  601.     (* these next two variables are provided to allow      *)
  602.     (* system developers to have a rough idea of the      *)
  603.     (* period of two externally controlled signals --      *)
  604.     (* the time between vertical blank interrupts and the *)
  605.     (* external line rate (which is counted by CIA A's      *)
  606.     (* "time of day" clock).  In general these values      *)
  607.     (* will be 50 or 60, and may or may not track each      *)
  608.     (* other.  These values replace the obsolete AFB_PAL  *)
  609.     (* and AFB_50HZ flags.                  *)
  610.  
  611.     VBlankFrequency    : SHORTCARD ;    (* (readable) *)
  612.     PowerSupplyFrequency: SHORTCARD ;    (* (readable) *)
  613.  
  614.     SemaphoreList    : List ;
  615.  
  616.     (* these next two are to be able to kickstart into user ram.*)
  617.     (* KickMemPtr holds a singly linked list of MemLists which    *)
  618.     (* will be removed from the memory list via AllocAbs.  If    *)
  619.     (* all the AllocAbs's succeeded, then the KickTagPtr will    *)
  620.     (* be added to the rom tag list.                *)
  621.  
  622.     KickMemPtr        : ADDRESS ;    (* ptr to queue of mem lists *)
  623.     KickTagPtr        : ADDRESS ;    (* ptr to rom tag queue         *)
  624.     KickCheckSum    : ADDRESS ;    (* checksum for mem and tags *)
  625.  
  626. (*----- V36 Exec additions start here -------------------------------------*)
  627.  
  628.     ex_Pad0        : CARDINAL ; (* Private internal use     *)
  629.     ex_LaunchPoint    : LONGINT  ; (* Private to Launch/Switch *)
  630.     ex_RamLibPrivate    : ADDRESS  ;
  631.  
  632.     (* The next ULONG contains the system "E" clock frequency,        *)
  633.     (* expressed in Hertz.    The E clock is used as a timebase for    *)
  634.     (* the Amiga's 8520 I/O chips. (E is connected to "02").        *)
  635.     (* Typical values are 715909 for NTSC, or 709379 for PAL.        *)
  636.  
  637.     ex_EClockFrequency    : LONGINT ; (* (readable)              *)
  638.     ex_CacheControl    : LONGSET ; (* Private to CacheControl calls *)
  639.     ex_TaskID        : LONGINT ; (* Next available task ID         *)
  640.  
  641.     ex_Reserved1    : ARRAY [0..4] OF LONGINT ;
  642.  
  643.     ex_MMULock        : ADDRESS ; (* private *)
  644.  
  645.     ex_Reserved2    : ARRAY [0..2] OF LONGINT ;
  646.  
  647. (*----- V39 Exec additions start here -------------------------------------*)
  648.  
  649.     (* The following list and data element are used    *)
  650.     (* for V39 exec's low memory handler...        *)
  651.  
  652.     ex_MemHandlers    : MinList ; (* The handler list        *)
  653.     ex_MemHandler    : ADDRESS ; (* Private! handler pointer    *)
  654.   END ;
  655.  
  656. VAR
  657.   SysBase[4] : ExecBasePtr ;
  658.  
  659. (*----- Bit defines for AttnFlags (see above) -----------------------------*)
  660.  
  661. (*  Processors and Co-processors: *)
  662.  
  663. CONST
  664.   AFB_68010 = 0 ; (* also set for 68020 *)
  665.   AFB_68020 = 1 ; (* also set for 68030 *)
  666.   AFB_68030 = 2 ; (* also set for 68040 *)
  667.   AFB_68040 = 3 ;
  668.   AFB_68881 = 4 ; (* also set for 68882 *)
  669.   AFB_68882 = 5 ;
  670.   AFB_FPU40 = 6 ; (* Set if 68040 FPU   *)
  671.  
  672. (* The AFB_FPU40 bit is set when a working 68040 FPU        *)
  673. (* is in the system.  If this bit is set and both the        *)
  674. (* AFB_68881 and AFB_68882 bits are not set, then the 68040    *)
  675. (* math emulation code has not been loaded and only 68040    *)
  676. (* FPU instructions are available.  This bit is valid *ONLY*    *)
  677. (* if the AFB_68040 bit is set.                    *)
  678.  
  679.   AFB_PRIVATE = 15  ;    (* Just what it says *)
  680.  
  681.   AFF_68010   = {0} ;
  682.   AFF_68020   = {1} ;
  683.   AFF_68030   = {2} ;
  684.   AFF_68040   = {3} ;
  685.   AFF_68881   = {4} ;
  686.   AFF_68882   = {5} ;
  687.   AFF_FPU40   = {6} ;
  688.  
  689.   AFF_PRIVATE = {15};
  690.  
  691. (*----- Selected flag definitions for Cache manipulation calls ---------*)
  692.  
  693. CONST
  694.   CACRF_EnableI          = {0}  ; (* Enable instruction cache *)
  695.   CACRF_FreezeI          = {1}  ; (* Freeze instruction cache *)
  696.   CACRF_ClearI          = {3}  ; (* Clear instruction cache  *)
  697.   CACRF_IBE          = {4}  ; (* Instruction burst enable *)
  698.   CACRF_EnableD          = {8}  ; (* 68030 Enable data cache  *)
  699.   CACRF_FreezeD          = {9}  ; (* 68030 Freeze data cache  *)
  700.   CACRF_ClearD          = {11} ; (* 68030 Clear data cache   *)
  701.   CACRF_DBE          = {12} ; (* 68030 Data burst enable  *)
  702.   CACRF_WriteAllocate = {13} ; (* 68030 Write-Allocate mode*)
  703.                    (* (must always be set!)       *)
  704.   CACRF_EnableE          = {30} ;
  705.                      (* Master enable for external caches    *)
  706.                    (* External caches should track the     *)
  707.                    (* state of the internal caches            *)
  708.                    (* such that they do not cache anything *)
  709.                    (* that the internal cache turned off   *)
  710.                    (* for.                       *)
  711.   CACRF_CopyBack      = {31} ; (* Master enable for copyback caches    *)
  712.  
  713.   DMA_Continue      = {1} ; (* Continuation flag for CachePreDMA    *)
  714.   DMA_NoModify      = {2} ; (* Set if DMA does not update memory    *)
  715.   DMA_ReadFromRAM = {3} ; (* Set if DMA goes *FROM* RAM to device *)
  716.  
  717.  
  718. (*----------------------------- macros ---------------------------------------*)
  719.  
  720. PROCEDURE IsListEmpty( adr : ADDRESS ) : BOOLEAN ;
  721. PROCEDURE IsMsgPortEmpty( adr : ADDRESS ) : BOOLEAN ;
  722.  
  723. (*------------------- functions in linker library ---------------------------*)
  724.  
  725. PROCEDURE BeginIO    ( ioReq : IORequestPtr ) ;
  726. PROCEDURE CreateExtIO( port  : MsgPortPtr ; ioSize : LONGINT ) : IORequestPtr ;
  727. PROCEDURE CreatePort ( name  : STRING ; pri : LONGINT ) : MsgPortPtr ;
  728. PROCEDURE CreateStdIO( port  : MsgPortPtr ) : IOStdReqPtr ;
  729.  
  730. PROCEDURE CreateTask( name   : STRING ;
  731.               pri    : LONGINT ;
  732.               initPC : ADDRESS ;
  733.               stackSize : LONGINT ) : TaskPtr ;
  734.  
  735. PROCEDURE DeleteExtIO( ioReq : IORequestPtr ) ;
  736. PROCEDURE DeletePort( ioReq : MsgPortPtr ) ;
  737. PROCEDURE DeleteStdIO( ioReq : IOStdReqPtr ) ;
  738. PROCEDURE DeleteTask( task : TaskPtr ) ;
  739. PROCEDURE NewList( list : ListPtr ) ;
  740.  
  741. (*--------------------------  functions --------------------------------------*)
  742. (*----------------------------- misc -----------------------------------------*)
  743.  
  744. PROCEDURE Supervisor( userFunction : PROC ) : LONGINT ;
  745.  
  746. (*------------- special patchable hooks to internal exec activity ------------*)
  747. (*------------------------ module creation -----------------------------------*)
  748.  
  749. PROCEDURE InitCode( startClass : LONGSET ; version : LONGINT ) ;
  750. PROCEDURE InitStruct( initTable , memory : ADDRESS ; size : LONGINT ) ;
  751.  
  752. PROCEDURE MakeLibrary( funcInit , structInit : ADDRESS ;
  753.                libInit  : PROC ;
  754.                dataSize : LONGINT ;
  755.                segList  : ADDRESS ) : LibraryPtr ;
  756.  
  757. PROCEDURE MakeFunctions( target , functionArray : ADDRESS ;
  758.              funcDispBase : LONGINT ) ;
  759.  
  760. PROCEDURE FindResident( name : STRING ) : ResidentPtr ;
  761. PROCEDURE InitResident( resident : ResidentPtr ; segList : ADDRESS ) : ADDRESS ;
  762.  
  763. (*---------------------------- diagnostics -----------------------------------*)
  764.  
  765. PROCEDURE Alert( alertNum : LONGINT ) ;
  766. PROCEDURE Debug( flags : LONGSET ) ;
  767.  
  768. (*---------------------------- interrupts ------------------------------------*)
  769.  
  770. PROCEDURE Disable( ) ;
  771. PROCEDURE Enable( ) ;
  772. PROCEDURE Forbid( ) ;
  773. PROCEDURE Permit( ) ;
  774.  
  775. PROCEDURE SetSR( newSR, mask : BITSET ) : BITSET ;
  776. PROCEDURE SuperState( ) : ADDRESS ;
  777. PROCEDURE UserState( sysStack : ADDRESS ) ;
  778.  
  779. PROCEDURE SetIntVector( intNumber : LONGINT ;
  780.             interrupt : InterruptPtr ) : InterruptPtr ;
  781.  
  782. PROCEDURE AddIntServer( intNumber : LONGINT ; interrupt : InterruptPtr ) ;
  783. PROCEDURE RemIntServer( intNumber : LONGINT ; interrupt : InterruptPtr ) ;
  784. PROCEDURE Cause( interrupt : InterruptPtr ) ;
  785.  
  786. (*-------------------------- memory allocation -------------------------------*)
  787.  
  788. PROCEDURE Allocate( freeList : MemHeaderPtr ; byteSize : LONGINT ) ;
  789.  
  790. PROCEDURE Deallocate( freeList    : MemHeaderPtr ;
  791.               memoryBlock : ADDRESS ;
  792.               byteSize    : LONGINT ) ;
  793.  
  794. PROCEDURE AllocMem  ( byteSize : LONGINT ; requirements : LONGSET ) : ADDRESS ;
  795. PROCEDURE AllocAbs  ( byteSize : LONGINT ; location : ADDRESS ) : ADDRESS ;
  796. PROCEDURE FreeMem   ( memoryBlock : ADDRESS ; byteSize : LONGINT ) ;
  797. PROCEDURE AvailMem  ( requirements : LONGSET ) : LONGINT ;
  798. PROCEDURE AllocEntry( entry : MemListPtr ) : MemListPtr ;
  799. PROCEDURE FreeEntry ( entry : MemListPtr ) ;
  800.  
  801. (*------------------------------ lists ---------------------------------------*)
  802.  
  803. PROCEDURE Insert  ( list : ListPtr ; node : NodePtr ; pred : NodePtr ) ;
  804. PROCEDURE AddHead ( list : ListPtr ; node : NodePtr ) ;
  805. PROCEDURE AddTail ( list : ListPtr ; node : NodePtr ) ;
  806. PROCEDURE Remove  ( node : NodePtr ) ;
  807. PROCEDURE RemHead ( list : ListPtr ) : NodePtr ;
  808. PROCEDURE RemTail ( list : ListPtr ) : NodePtr ;
  809. PROCEDURE Enqueue ( list : ListPtr ; node : NodePtr ) ;
  810. PROCEDURE FindName( list : ListPtr ; name : STRING ) : NodePtr ;
  811.  
  812. (*------------------------------ tasks ---------------------------------------*)
  813.  
  814. PROCEDURE AddTask( task : TaskPtr ; initPC , finalPC : ADDRESS ) ;
  815. PROCEDURE RemTask( task : TaskPtr ) ;
  816. PROCEDURE FindTask( name : STRING ) : TaskPtr ;
  817. PROCEDURE SetTaskPri( task : TaskPtr ; priority : LONGINT ) : SHORTINT ;
  818. PROCEDURE SetSignal( newSignals, signalSet : LONGSET ) : LONGSET ;
  819. PROCEDURE SetExcept( newSignals, signalSet : LONGSET ) : LONGSET ;
  820. PROCEDURE Wait( signalSet : LONGSET ) : LONGSET ;
  821. PROCEDURE Signal( task : TaskPtr ; signalSet : LONGSET ) ;
  822. PROCEDURE AllocSignal( signalNum : LONGINT ) : SHORTINT ;
  823. PROCEDURE FreeSignal( signalNum : LONGINT );
  824. PROCEDURE AllocTrap( trapNum : LONGINT ) ;
  825. PROCEDURE FreeTrap( trapNum : LONGINT ) ;
  826.  
  827. (*------------------------------ messages ------------------------------------*)
  828.  
  829. PROCEDURE AddPort( port : MsgPortPtr ) ;
  830. PROCEDURE RemPort( port : MsgPortPtr ) ;
  831. PROCEDURE PutMsg ( port : MsgPortPtr ; message : ADDRESS ) ;
  832. PROCEDURE GetMsg ( port : MsgPortPtr ) : ADDRESS ;
  833. PROCEDURE ReplyMsg( message : ADDRESS ) ;
  834. PROCEDURE WaitPort( port : MsgPortPtr ) : ADDRESS ;
  835. PROCEDURE FindPort( name : STRING ) : MsgPortPtr ;
  836.  
  837. (*------------------------------ libraries -----------------------------------*)
  838.  
  839. PROCEDURE AddLibrary( library : LibraryPtr ) ;
  840. PROCEDURE RemLibrary( library : LibraryPtr ) ;
  841. PROCEDURE OldOpenLibrary( libName : STRING ) : LibraryPtr ;
  842. PROCEDURE OpenLibrary( libName : STRING ; version : LONGINT ) : LibraryPtr ;
  843. PROCEDURE CloseLibrary( library : LibraryPtr ) ;
  844.  
  845. PROCEDURE SetFunction( library     : LibraryPtr ;
  846.                funcOffset  : LONGINT ;
  847.                newFunction : PROC ) ;
  848.  
  849. PROCEDURE SumLibrary( library : LibraryPtr ) ;
  850.  
  851. (*-----------------------------  devices -------------------------------------*)
  852.  
  853. PROCEDURE AddDevice( device : DevicePtr ) ;
  854. PROCEDURE RemDevice( device : DevicePtr ) ;
  855.  
  856. PROCEDURE OpenDevice( devName   : STRING ;
  857.               unit      : LONGINT ;
  858.               ioRequest : IORequestPtr ;
  859.               flags     : LONGSET ) : SHORTINT ;
  860.  
  861. PROCEDURE CloseDevice( ioRequest : IORequestPtr ) : SHORTINT ;
  862. PROCEDURE DoIO   ( ioRequest : IORequestPtr ) : SHORTINT ;
  863. PROCEDURE SendIO ( ioRequest : IORequestPtr ) ;
  864. PROCEDURE CheckIO( ioRequest : IORequestPtr ) : IORequestPtr ;
  865. PROCEDURE WaitIO ( ioRequest : IORequestPtr ) : SHORTINT ;
  866. PROCEDURE AbortIO( ioRequest : IORequestPtr ) ;
  867.  
  868. (*---------------------------- resources -------------------------------------*)
  869.  
  870. PROCEDURE AddResource ( resource : ADDRESS ) ;
  871. PROCEDURE RemResource ( resource : ADDRESS ) ;
  872. PROCEDURE OpenResource( resName : STRING ) : ADDRESS ;
  873.  
  874. (*---------------------- private diagnostic support --------------------------*)
  875. (*------------------------------ misc ----------------------------------------*)
  876.  
  877. PROCEDURE RawDoFmt( formatString : STRING ;
  878.             dataStream   : ADDRESS ;
  879.             putChProc    : PROC ;
  880.             putChData    : ADDRESS ) : ADDRESS ;
  881.  
  882. PROCEDURE GetCC( ) : BITSET ;
  883. PROCEDURE TypeOfMem( address : ADDRESS ) : LONGSET ;
  884. PROCEDURE Procure( sigSem , bidMsg : SignalSemaphorePtr ) : LONGINT ;
  885. PROCEDURE Vacate( sigSem , bidMsg : SignalSemaphorePtr ) ;
  886.  
  887. (*-------------- functions in V33 or higher (Release 1.2) --------------------*)
  888. (*-------------- signal semaphores (note funny registers) --------------------*)
  889.  
  890. PROCEDURE InitSemaphore   ( sigSem : SignalSemaphorePtr ) ;
  891. PROCEDURE ObtainSemaphore ( sigSem : SignalSemaphorePtr ) ;
  892. PROCEDURE ReleaseSemaphore( sigSem : SignalSemaphorePtr ) ;
  893. PROCEDURE AttemptSemaphore( sigSem : SignalSemaphorePtr ) : LONGINT ;
  894. PROCEDURE ObtainSemaphoreList ( sigSem : ListPtr ) ;
  895. PROCEDURE ReleaseSemaphoreList( sigSem : ListPtr ) ;
  896. PROCEDURE FindSemaphore( sigSem : STRING ) : SignalSemaphorePtr;
  897. PROCEDURE AddSemaphore ( sigSem : SignalSemaphorePtr ) ;
  898. PROCEDURE RemSemaphore ( sigSem : SignalSemaphorePtr ) ;
  899.  
  900. (*---------------------------- kickmem support -------------------------------*)
  901.  
  902. PROCEDURE SumKickData( ) : LONGINT ;
  903.  
  904. (*--------------------------- more memory support ----------------------------*)
  905.  
  906. PROCEDURE AddMemList( size : LONGINT ;
  907.               attributes : LONGSET ;
  908.               pri  : LONGINT ;
  909.               base : ADDRESS ;
  910.               name : STRING ) ;
  911.  
  912. PROCEDURE CopyMem( source, dest : ADDRESS ; size : LONGINT ) ;
  913. PROCEDURE CopyMemQuick( source, dest : ADDRESS ; size : LONGINT ) ;
  914.  
  915. (*------------------------------- cache --------------------------------------*)
  916. (*------------------- functions in V36 or higher (Release 2.0) ---------------*)
  917.  
  918. PROCEDURE CacheClearU( ) ;
  919. PROCEDURE CacheClearE( adr : ADDRESS ; length : LONGINT ; caches : LONGSET ) ;
  920. PROCEDURE CacheControl( cacheBits , cacheMask : LONGSET ) : LONGSET ;
  921.  
  922. (*-------------------------------- misc --------------------------------------*)
  923.  
  924. PROCEDURE CreateIORequest( port : MsgPortPtr ; size : LONGINT ) ;
  925. PROCEDURE DeleteIORequest( iorequest : ADDRESS ) ;
  926. PROCEDURE CreateMsgPort( ) : MsgPortPtr ;
  927. PROCEDURE DeleteMsgPort( port : MsgPortPtr ) ;
  928. PROCEDURE ObtainSemaphoreShared( sigSem : SignalSemaphorePtr ) ;
  929.  
  930. (*------------------------ even more memory support --------------------------*)
  931.  
  932. PROCEDURE AllocVec( byteSize : LONGINT ; requirements : LONGSET ) : ADDRESS ;
  933. PROCEDURE FreeVec ( memoryBlock : ADDRESS ) ;
  934.  
  935. (*-------------------------- V39 Pool LVOs -----------------------------------*)
  936.  
  937. PROCEDURE CreatePool( requirements : LONGSET ;
  938.               puddleSize   : LONGINT ;
  939.               threshSize   : LONGINT ) : ADDRESS ;
  940.  
  941. PROCEDURE DeletePool ( poolHeader : ADDRESS ) ;
  942. PROCEDURE AllocPooled( poolHeader : ADDRESS ; memSize : LONGINT ) : ADDRESS ;
  943.  
  944. PROCEDURE FreePooled( poolHeader : ADDRESS ;
  945.               memory  : ADDRESS ;
  946.               memSize : LONGINT ) ;
  947.  
  948. (*--------------------------------- misc -------------------------------------*)
  949.  
  950. PROCEDURE AttemptSemaphoreShared( sigSem : SignalSemaphorePtr ) : LONGINT ;
  951. PROCEDURE ColdReboot( ) ;
  952. PROCEDURE StackSwap( newStack : StackSwapStructPtr ) ;
  953.  
  954. (*------------------------------- task trees ---------------------------------*)
  955.  
  956. PROCEDURE ChildFree  ( tid : ADDRESS ) ;
  957. PROCEDURE ChildOrphan( tid : ADDRESS ) ;
  958. PROCEDURE ChildStatus( tid : ADDRESS ) ;
  959. PROCEDURE ChildWait  ( tid : ADDRESS ) ;
  960.  
  961. (*------------------------- future expansion ---------------------------------*)
  962.  
  963. PROCEDURE CachePreDMA ( address : ADDRESS ;
  964.             length  : ADDRESS ;
  965.             flags   : LONGSET ) : ADDRESS ;
  966.  
  967. PROCEDURE CachePostDMA( address : ADDRESS ; length : ADDRESS ; flags : LONGSET);
  968.  
  969. (*------------------ functions in V39 or higher (Release 3) ------------------*)
  970. (*--------------------- Low memory handler functions -------------------------*)
  971.  
  972. PROCEDURE AddMemHandler( memhand : InterruptPtr ) ;
  973. PROCEDURE RemMemHandler( memhand : InterruptPtr ) ;
  974.  
  975. (*------- Function to attempt to obtain a Quick Interrupt Vector -------------*)
  976.  
  977. PROCEDURE ObtainQuickVector( interruptCode : ADDRESS ) : LONGINT ;
  978.  
  979. END Exec.
  980.